#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <cstdio>

volatile int flag = 0;   // 一开始为假

void handler(int signo)
{
    printf("%d号信号已经成功发出了\n", signo);
    flag = 1;
}

int main()
{
    signal(2, handler);

    while(!flag);   // 故意不写 while 的代码块 { }

    printf("进程已退出\n");

    return 0;
}


// void Print(sigset_t &pending)
// {
//     for (int sig = 31; sig > 0; sig--)
//     {
//         if (sigismember(&pending, sig))
//         {
//             std::cout << 1;
//         }
//         else
//         {
//             std::cout << 0;
//         }
//     }
//     std::cout << std::endl;
// }

// void handler(int signum)
// {
//     std::cout << "get a sig: " << signum << std::endl;
//     while (true)
//     {
//         sigset_t pending;
//         sigpending(&pending);

//         Print(pending);
//         sleep(1);
//     }
// }

// int main()
// {
//     struct sigaction act, oact;
//     act.sa_handler = handler;
//     sigemptyset(&act.sa_mask);
//     sigaddset(&act.sa_mask, 3);
//     act.sa_flags = 0;

//     sigaction(2, &act, &oact);

//     while (true)
//     {
//         std::cout << "I am a process, pid: " << getpid() << std::endl;
//         sleep(1);
//     }

//     return 0;
// }
